//******************      ***************

int analogPin=A2; //    ,   A0

int release_button = 1023; //    
int button_release_range = 50; //   + -   
int button_range = 10; //    + -
int time_holding = 500; //      
int time_tinkling = 10; //      
int vol_up = 896; //    
int vol_down = 836; //    
int alt_tab = 475; //       Alt + Tab
int next = 587; //       Next     Fast Forward  
int previous = 683; //       Previous     Rewind  
int play_pause = 175; //       Play/Pause     Mute  

//**************************************************************************

int data; 
unsigned long flag = 0; 
unsigned long eventTime = 0; 
unsigned long pauseMillis = 0;

void setup() 
{ 
Keyboard.begin(); 
} 

void loop() 
{ 
data=analogRead(analogPin); //    

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 0) //    
{ 
eventTime=millis(); 
} 

//**********************  ************************************

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_up - button_range && data <= vol_up + button_range && flag == 0) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
Remote.increase(); 
flag = 5; 
delay(10); 
Remote.clear(); 
} 

if(millis()-eventTime>time_holding && data >= vol_up - button_range && data <= vol_up + button_range && flag == 5 || data >= vol_up - button_range && data <= vol_up + button_range && flag && flag == 3) //    500  ?  (  millis()-eventTime>time_holding) 
{  
Remote.increase(); //    ,    0,1  
flag = 3; 
Remote.clear(); 
delay(100); 
} 

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= vol_down - button_range && data <= vol_down + button_range && flag == 0) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
Remote.decrease(); 
flag = 6; 
delay(10); 
Remote.clear(); 
} 

if(millis()-eventTime>time_holding && data >= vol_down - button_range && data <= vol_down + button_range && flag == 6 || data >= vol_down - button_range && data <= vol_down + button_range && flag == 3) //    500  ?  (  millis()-eventTime>time_holding) 
{  
Remote.decrease(); //    ,    0,1  
flag = 3; 
Remote.clear(); 
delay(100); 
} 

//********************** AltTab +    ************************************  

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= alt_tab - button_range && data <= alt_tab + button_range) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
flag = 1; 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis == 0) //     , Alt+Tab 
{ 
Keyboard.press(KEY_LEFT_ALT); 
Keyboard.press(KEY_TAB); 
Keyboard.release(KEY_TAB); 
Keyboard.press(KEY_TAB); 
Keyboard.release(KEY_TAB); 
flag = 0; 
pauseMillis = millis(); 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 1 && pauseMillis != 0) //      , Alt+Tab 
{ 
Keyboard.press(KEY_TAB); 
Keyboard.release(KEY_TAB); 
flag = 0; 
pauseMillis = millis(); 
} 

if(pauseMillis && millis()-pauseMillis >= 800 && data>=release_button - button_release_range && data<=release_button + button_release_range) // && flag == 7 && data>=950) 
{ 
flag = 0; 
pauseMillis = 0; 
Keyboard.releaseAll(); 
} 

if(millis()-eventTime>time_holding && data >= alt_tab - button_range && data <= alt_tab + button_range && flag == 1) //    500  ?  (  millis()-eventTime>time_holding) 
{  
//Remote.play_pause(); //    ,    
flag = 0; 
//delay(10); 
//Remote.clear(); 
} 
//********************** Next  Fast Forward ************************************  

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= next - button_range && data <= next + button_range) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
flag = 2; 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 2) //     , Next 
{ 
Remote.next(); 
flag = 0; 
delay(10); 
Remote.clear(); 
} 

if(millis()-eventTime>time_holding && data >= next - button_range && data <= next + button_range && flag == 2 || data >= next - button_range && data <= next + button_range && flag == 3) //    500  ?  (  millis()-eventTime>time_holding) 
{  
Remote.forward(); //    , Fast Forward 
flag = 3; 
Remote.clear(); 
delay(100); 
} 
//********************** Previous  Rewind ************************************  

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= previous - button_range && data <= previous + button_range) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
flag = 4; 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 4) //     , Previous 
{ 
Remote.previous(); 
flag = 0; 
delay(10); 
Remote.clear(); 
} 

if(millis()-eventTime>time_holding && data >= previous - button_range && data <= previous + button_range && flag == 4 || data >= previous - button_range && data <= previous + button_range && flag == 3) //    500  ?  (  millis()-eventTime>time_holding) 
{  
Remote.rewind(); //    , Rewind 
flag = 3; 
Remote.clear(); 
delay(100); 
} 

//********************** Play/pause + Mute ************************************  

if(millis()-time_tinkling && millis()-eventTime<time_holding-1 && data >= play_pause - button_range && data <= play_pause + button_range) //     10  499  (  millis()-time_tinkling && millis()-eventTime<time_holding-1) 
{  
flag = 7; 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 7) //     ,  /  
{ 
Remote.play_pause();  
flag = 0; 
delay(10); 
Remote.clear(); 
} 

if(millis()-eventTime>time_holding && data >= play_pause - button_range && data <= play_pause + button_range && flag == 7) //    500  ?  (  millis()-eventTime>time_holding) 
{  
Remote.mute(); //    ,  
flag = 0;
delay(10);
Remote.clear(); 
} 

if(data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 3 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 5 || data>=release_button - button_release_range && data<=release_button + button_release_range && flag == 6) //     
{ 
flag = 0; 
}  
}    